From 6a60e335cd4e313b025d6294869e1c950700521b Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 17 Jan 2017 05:20:07 +0100 Subject: [PATCH] vulkan: Add push constants to fragment shader That way we don't need to move the clip rounded rect manually through the vertex shader into the fragment shader but can just look at the push constants. Simplifies shaders a lot. --- gsk/gskvulkanpushconstants.c | 56 +++++++----------- gsk/gskvulkanpushconstantsprivate.h | 15 +---- gsk/gskvulkanrenderpass.c | 6 +- .../vulkan/blend-clip-rounded.frag.glsl | 6 +- .../vulkan/blend-clip-rounded.frag.spv | Bin 5180 -> 5464 bytes .../vulkan/blend-clip-rounded.vert.glsl | 4 -- .../vulkan/blend-clip-rounded.vert.spv | Bin 4940 -> 4684 bytes .../vulkan/border-clip-rounded.frag.glsl | 6 +- .../vulkan/border-clip-rounded.frag.spv | Bin 9832 -> 10080 bytes .../vulkan/border-clip-rounded.vert.glsl | 6 -- .../vulkan/border-clip-rounded.vert.spv | Bin 9312 -> 8952 bytes .../vulkan/color-clip-rounded.frag.glsl | 8 +-- .../vulkan/color-clip-rounded.frag.spv | Bin 5228 -> 5552 bytes .../vulkan/color-clip-rounded.vert.glsl | 4 -- .../vulkan/color-clip-rounded.vert.spv | Bin 2176 -> 1888 bytes .../color-matrix-clip-rounded.frag.glsl | 10 ++-- .../vulkan/color-matrix-clip-rounded.frag.spv | Bin 6588 -> 6872 bytes .../color-matrix-clip-rounded.vert.glsl | 8 +-- .../vulkan/color-matrix-clip-rounded.vert.spv | Bin 5292 -> 5036 bytes .../vulkan/linear-clip-rounded.frag.glsl | 8 +-- .../vulkan/linear-clip-rounded.frag.spv | Bin 6748 -> 7032 bytes .../vulkan/linear-clip-rounded.vert.glsl | 6 +- .../vulkan/linear-clip-rounded.vert.spv | Bin 6208 -> 5952 bytes 23 files changed, 47 insertions(+), 96 deletions(-) diff --git a/gsk/gskvulkanpushconstants.c b/gsk/gskvulkanpushconstants.c index 34574c2532..769f3dbbbb 100644 --- a/gsk/gskvulkanpushconstants.c +++ b/gsk/gskvulkanpushconstants.c @@ -4,6 +4,16 @@ #include "gskroundedrectprivate.h" +typedef struct _GskVulkanPushConstantsWire GskVulkanPushConstantsWire; + +struct _GskVulkanPushConstantsWire +{ + struct { + float mvp[16]; + float clip[12]; + } common; +}; + void gsk_vulkan_push_constants_init (GskVulkanPushConstants *constants, const graphene_matrix_t *mvp, @@ -62,14 +72,14 @@ static void gsk_vulkan_push_constants_wire_init (GskVulkanPushConstantsWire *wire, const GskVulkanPushConstants *self) { - graphene_matrix_to_float (&self->mvp, wire->vertex.mvp); - gsk_rounded_rect_to_float (&self->clip.rect, wire->vertex.clip); + graphene_matrix_to_float (&self->mvp, wire->common.mvp); + gsk_rounded_rect_to_float (&self->clip.rect, wire->common.clip); } void -gsk_vulkan_push_constants_push_vertex (const GskVulkanPushConstants *self, - VkCommandBuffer command_buffer, - VkPipelineLayout pipeline_layout) +gsk_vulkan_push_constants_push (const GskVulkanPushConstants *self, + VkCommandBuffer command_buffer, + VkPipelineLayout pipeline_layout) { GskVulkanPushConstantsWire wire; @@ -77,26 +87,11 @@ gsk_vulkan_push_constants_push_vertex (const GskVulkanPushConstants *self, vkCmdPushConstants (command_buffer, pipeline_layout, - VK_SHADER_STAGE_VERTEX_BIT, - G_STRUCT_OFFSET (GskVulkanPushConstantsWire, vertex), - sizeof (wire.vertex), - &wire.vertex); -} - -#if 0 -void -gsk_vulkan_push_constants_push_fragment (GskVulkanPushConstants *self, - VkCommandBuffer command_buffer, - VkPipelineLayout pipeline_layout) -{ - vkCmdPushConstants (command_buffer, - pipeline_layout, - VK_SHADER_STAGE_FRAGMENT_BIT, - G_STRUCT_OFFSET (GskVulkanPushConstants, fragment), - sizeof (self->fragment), - &self->fragment); + VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, + G_STRUCT_OFFSET (GskVulkanPushConstantsWire, common), + sizeof (wire.common), + &wire.common); } -#endif uint32_t gst_vulkan_push_constants_get_range_count (void) @@ -109,16 +104,9 @@ gst_vulkan_push_constants_get_ranges (void) { static const VkPushConstantRange ranges[1] = { { - .stageFlags = VK_SHADER_STAGE_VERTEX_BIT, - .offset = G_STRUCT_OFFSET (GskVulkanPushConstantsWire, vertex), - .size = sizeof (((GskVulkanPushConstantsWire *) 0)->vertex) -#if 0 - }, - { - .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT, - .offset = G_STRUCT_OFFSET (GskVulkanPushConstants, fragment), - .size = sizeof (((GskVulkanPushConstants *) 0)->fragment) -#endif + .stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, + .offset = G_STRUCT_OFFSET (GskVulkanPushConstantsWire, common), + .size = sizeof (((GskVulkanPushConstantsWire *) 0)->common) } }; diff --git a/gsk/gskvulkanpushconstantsprivate.h b/gsk/gskvulkanpushconstantsprivate.h index 4642d526a3..f1652c98af 100644 --- a/gsk/gskvulkanpushconstantsprivate.h +++ b/gsk/gskvulkanpushconstantsprivate.h @@ -8,7 +8,6 @@ G_BEGIN_DECLS typedef struct _GskVulkanPushConstants GskVulkanPushConstants; -typedef struct _GskVulkanPushConstantsWire GskVulkanPushConstantsWire; struct _GskVulkanPushConstants { @@ -16,18 +15,6 @@ struct _GskVulkanPushConstants GskVulkanClip clip; }; -struct _GskVulkanPushConstantsWire -{ - struct { - float mvp[16]; - float clip[12]; - } vertex; -#if 0 - struct { - } fragment; -#endif -}; - const VkPushConstantRange * gst_vulkan_push_constants_get_ranges (void) G_GNUC_PURE; uint32_t gst_vulkan_push_constants_get_range_count (void) G_GNUC_PURE; @@ -49,7 +36,7 @@ gboolean gsk_vulkan_push_constants_intersect_rounded (GskVulk const GskVulkanPushConstants *src, const GskRoundedRect *rect); -void gsk_vulkan_push_constants_push_vertex (const GskVulkanPushConstants *self, +void gsk_vulkan_push_constants_push (const GskVulkanPushConstants *self, VkCommandBuffer command_buffer, VkPipelineLayout pipeline_layout); diff --git a/gsk/gskvulkanrenderpass.c b/gsk/gskvulkanrenderpass.c index c92375e30b..619a1172b3 100644 --- a/gsk/gskvulkanrenderpass.c +++ b/gsk/gskvulkanrenderpass.c @@ -886,9 +886,9 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass *self, break; case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS: - gsk_vulkan_push_constants_push_vertex (&op->constants.constants, - command_buffer, - gsk_vulkan_pipeline_layout_get_pipeline_layout (layout)); + gsk_vulkan_push_constants_push (&op->constants.constants, + command_buffer, + gsk_vulkan_pipeline_layout_get_pipeline_layout (layout)); break; default: diff --git a/gsk/resources/vulkan/blend-clip-rounded.frag.glsl b/gsk/resources/vulkan/blend-clip-rounded.frag.glsl index fb1c14808c..23ef1c83d7 100644 --- a/gsk/resources/vulkan/blend-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/blend-clip-rounded.frag.glsl @@ -1,5 +1,7 @@ #version 420 core +#include "constants.glsl" + struct RoundedRect { vec4 bounds; vec4 corners; @@ -7,8 +9,6 @@ struct RoundedRect { layout(location = 0) in vec2 inPos; layout(location = 1) in vec2 inTexCoord; -layout(location = 2) in flat vec4 inClipBounds; -layout(location = 3) in flat vec4 inClipWidths; layout(set = 0, binding = 0) uniform sampler2D inTexture; @@ -51,7 +51,7 @@ float clip(vec2 pos, RoundedRect r) { void main() { - RoundedRect r = RoundedRect(vec4(inClipBounds.xy, inClipBounds.xy + inClipBounds.zw), inClipWidths); + RoundedRect r = RoundedRect(vec4(push.clip_bounds.xy, push.clip_bounds.xy + push.clip_bounds.zw), push.clip_widths); color = texture (inTexture, inTexCoord) * clip (inPos, r); } diff --git a/gsk/resources/vulkan/blend-clip-rounded.frag.spv b/gsk/resources/vulkan/blend-clip-rounded.frag.spv index aa407c2d1bdd84e1c9bce556022ab5322e483643..adaa02be7221189fcce93b3845280f4d51f7ed1d 100644 GIT binary patch delta 1269 zcmZ9LNpBND5QTeeW)c>&sY(4DFLaiUVYSv?*G%~m;RHKlrry(!CAJ69L?67GmkPW$zVGhsWJ zYW~x6RzL4gwW{cSNqpYw)rx<%nv^!KYTuS#*PSx(eMvi$;dIzY1lN3&^@Ed@3$1pe zl4^_bOl~0RCMTtkHYxR0wq98`9Sb zY<4K!kJZq@Zk^sreR>*6Iqz@J@1#Ebpw73-z7*)6{I{~q$2s}p8 z_hJhIDIa9{&`5zZHXrAoWgUU{<{Zx0XqI>5-|omT+qF^a<+EM*F>R8@I|9QD3WrsR zChrQJ_^P)pl9SZ5(f7qyN6$$^KcTu*ejv=HkohnFq4?_jd1>f2|B-w&A)fcPM33cD z6MbA=d$Lc2djg-;p2|n#4XpM|KKXoBdoCZ1xRN?%;uiunsX-1g>CBONB|_8e)IQN` z`RFAzv`+SoKoRsK+V=HSBc3IG5?COdM_LkC*eT`Hz!!lSbQ|+ce%DO=Eyx}bIOM_~ n0+(l2Wkhsu=Zp0BHu3QX`kOrNWi9&WmULYVoi3r~B z8cmG%@%}0y;Q4C0bgDU2om1z(R8>E8ZN6_#)nw|-0)6%NG~e8vX|%MN!*nhxXlbj$ zFX4}HDU=t-{{^L}&_5N;^u=?9{5OeKYoT*h^sy*E`!&(iE^;ECii^%yYiF9H!k5YK zvvbACL?g4)`s28mCtupiPRqt5g5PMK$rW?cW+f-wy$Uv9Dc9;-X#+CTcDqpHc*-^B z_c#uFDYsW?5Y8Z$20I;ldC@Tm>Kyib|MgQs+oaCMmQZa*uT(Bc0H`yhjYDX_~GS+y|Aamg?d+$ z*4!ujvt0DECeZt^RP^;kLuZiDdpESM_HK%!0Y zhG#@tsCieQ8HU&Pv__+l*Y>q0p5e6vtnUmR+keEKW}m_@E&jua3yg6V~VHNwSebJ^ocKckCb?`KlvQELjZPaMA#+JBwZDQ{IDojdz}HY@bf1iVN-GbaXEwV}xmN3>?DR#QS=sO=rnacX9^nc+GnQt|mN| zzsx*l4uILl#OgQU_52K5O{Aa!u2%WC;MOpv${z`{81?aPW2?<(KR0(L@4)Ki?_#To z_2uuOnQhDwT5jNdAK2CtwFhuDuNJk3aPvJ;n+svA6b(Gg_T1(?u&6~$A}H+RmVQxv zaW4ySKTq8HW4PLaTi?0}t9zedt1WuzGf!dGi@DF>YQp0@SE`*phnsE8rAm7Nx1YW^ z&l0@e@g=s}Qn}_=uzJVW*lHrKId*)5X0|bLRd3;T^+fF*T+L~t_8xA&Cu$#Dv!a1< z&C76$TErxR{;yeIyjB6P5B?EbttfxopVoOlW2=dHEi0YG{sQ`7KTEvG`zz=Ibz}Sk ftN``6if?dhs>kK8!kq%&P&smrv0D7-%(VUiY>$Pw delta 1310 zcmZ9L%Wq6!7{Cd|H73n80L{seuI!y9ZidQK*%_Y5`%YGoiNh z!o3$I8JDyjYKf*4y-m8N=XHTAh#%FHSEUX5vYuI*L??o@^D|lz%lQcbG_aq@u1enSMyw;DNQI+ zl3zPNO=7l}330xETl-6Kya~3xezGh2N*ZsHmp=7cjDA)-C5{I;%yS{%>9jc2M6*SMvzr17W5TaD!7;z~X)&bO-LQP^si!gfpQf?|)z%Tr%y z2p3WeHCGE7GgqVeu-sbZdyKysl-pJK{#4&g#2-5_pIglVc6gA6Pb>79_%$#@2$yi}B3-~UH$Ve1qVMD z)uN`)kO;F<7fyse?DYv^r(1sA4E&_G{<^-|{lTSzbXL{nTavhdy zqhy2*sW5ETIC#cRd5?-;D;xg-kLfEo{FB~BKO#J(_XTmR5&w*A{nV+Qc;PtRC?tYw zUO)mS0JCxZRxumTVy;#evu`l@-pF8b%LnEh;5zwbB}skVNG?eJUH5&wSq|FIR``SP zat7}gevrZFX-3np5njn){7*9&Kdotc^3!_YA6sn{nHE2W{NE0P#G=El^HK_@buZ z*l!Aulq3X6#7eSBmOZOM93=;j#!AjHJ`vciH$gZp z;WODxLJ)lcwuCQaTS9sS%woy+Qa1UB!FS)6>y>Qg!oS|FaV5mB1@zMubPmB$z4vG^ zDb0(YNh#0YviTO`qY=TQN{;Wn>|J`pSp>B=|;r(HKOdi69pdq2L8?ND3`*ke=33#0z>vR8$mW z`skBC!SILl&0k?$-|3mA_Ov^lwbsn+*?Xqv*Z7~Yws=E#lXEeBn%&oLZD)J;xrB4! z%B4MDrW=eoH>Gt`>#o+kRza(%^+fBF*3Qq|b|UcnffcXNpI`Gct3)PUV;EWCr@c&R zsmhbB!jELV#ibHLQv0%l=cn?9?+F*u#dI#xAN+@tZcezEUn{M8nbX0#c!Ze%FcX767Y9y8n8^V1pzrMc zXqs&Zx@2CFq^~=qbs@r>1I{qD*JA1g6MrYNIT!w5Mn~UjJmuG7%GYOlRq4%823 zgO4&erxgh1JaAUvPC3@nbD0UWGCHL)PPLe^F??J)V`KQd@J9Jm%dr`nz<`)SCI-YX z`r8^zCWZq2qUxp2j4+3u5DTA`4VNh&Xgzpjp-x>ChFd@lmg-bb7>-5%IrpYIOWtL1 zMB_6V{$-qdB%A$sj9ZB~XybAM#Pb;E$6OGS@F{JK^VseIZ5PYga!Wy7JZ$ASuB37<<~8W8ChxGzfnLUxxD&{s5k=sCP4 zeMAVf>JC7VqMVl2Rx@SSW+$cTU`mVEDJ zlaCm*t*Bkwve^s0Rd0Ya&L0Hybv;@*4C(ib7Mt>NLuXUk^F=lbJmR2@n-CzL$G8+D3<+-|JSjj@k`N@P>OpVF<^^X5za^U& zoQ?2p*~H_A#yt+`7v5r~Wp`^oaEDuV?!E||aOS4Lh}`guY?~5p9c)wbP&QLS4BBqg R$XVHJg8o-`2tKDH{sVVj)4l)z diff --git a/gsk/resources/vulkan/border-clip-rounded.vert.glsl b/gsk/resources/vulkan/border-clip-rounded.vert.glsl index a66d7f78dc..8db91a58a4 100644 --- a/gsk/resources/vulkan/border-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/border-clip-rounded.vert.glsl @@ -14,9 +14,6 @@ layout(location = 2) out flat vec4 outRect; layout(location = 3) out flat vec4 outCornerWidths; layout(location = 4) out flat vec4 outCornerHeights; layout(location = 5) out flat vec4 outBorderWidths; -layout(location = 6) out flat vec4 outClipBounds; -layout(location = 7) out flat vec4 outClipWidths; -layout(location = 8) out flat vec4 outClipHeights; out gl_PerVertex { vec4 gl_Position; @@ -112,7 +109,4 @@ void main() { outCornerWidths = inCornerWidths; outCornerHeights = inCornerHeights; outBorderWidths = inBorderWidths; - outClipBounds = push.clip_bounds; - outClipWidths = push.clip_widths; - outClipHeights = push.clip_heights; } diff --git a/gsk/resources/vulkan/border-clip-rounded.vert.spv b/gsk/resources/vulkan/border-clip-rounded.vert.spv index 527168616730a55869060d53506ee6fa6095d492..ce5e85e3dce516d82e033bb5e2dd1f906e25c462 100644 GIT binary patch delta 50 zcmaFh@xzsunMs+Qfq@YSc^TR!@|rRVO>}nMI7Nhc^9SZRjGG^@I-3Fvu-{*o=X7bGd9ID**KmJ8A#` diff --git a/gsk/resources/vulkan/color-clip-rounded.frag.glsl b/gsk/resources/vulkan/color-clip-rounded.frag.glsl index 515a9989e7..c1fa5038d5 100644 --- a/gsk/resources/vulkan/color-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/color-clip-rounded.frag.glsl @@ -1,9 +1,9 @@ #version 420 core +#include "constants.glsl" + layout(location = 0) in vec2 inPos; layout(location = 1) in vec4 inColor; -layout(location = 2) in vec4 inClipBounds; -layout(location = 3) in vec4 inClipWidths; layout(location = 0) out vec4 color; @@ -50,7 +50,7 @@ float clip(vec2 pos, RoundedRect r) { void main() { - RoundedRect r = RoundedRect(vec4(inClipBounds.xy, inClipBounds.xy + inClipBounds.zw), inClipWidths); + RoundedRect r = RoundedRect(vec4(push.clip_bounds.xy, push.clip_bounds.xy + push.clip_bounds.zw), push.clip_widths); - color = vec4(inColor.rgb * inColor.a, inColor.a) * clip (inPos, r); + color = vec4(inColor.rgb * inColor.a, inColor.a) * clip (inPos, r); } diff --git a/gsk/resources/vulkan/color-clip-rounded.frag.spv b/gsk/resources/vulkan/color-clip-rounded.frag.spv index cf650af95c1e4dfd8adf4a9f3e785c175552c639..ce925764d411b2647b4da32cfbd0bc97748b9e85 100644 GIT binary patch delta 1402 zcmZ9L$!-%t5QckVys%ghI3yBMK*|LaapVw1Z1N$wpbSp{<WgJhoyx9On&?kY5C3 zi8Vmj_kG{7S;B!g;KKj4yJ3{Jes%qSSJhNiw}02-Zm8$7Y)%+?lai+#bC7R4p25YUw##bJ%& z;63g2@?yE_`1cf_N)?}#KBWlX%&0gkt>sN(%$Af$mpC3wX>^DdrZl=kJ0?t;jQt3H zlPZAujtDF`vxbu!PDB2DTW5Es6C}fu&q-b{a9tyA=w3qyJ9T=&+4MExI79X4mz)hB z)A?5I4+P31{)u+V=bU))8Cx?V4$rg)DF-+`pbhE#h4!4_{a?E?G~&NHu6JlZ0PnV2 z*@^L6$2eS)i3+VV^Ql;$>mEy(c%Mo9fr#y|0R|^~8SS2po1uicZ4 zhF_?P>G-}tPI3@~kE=N`4@D@N8}%c4BpW?cK^wF`7D$4=U)OZjY2N>(I2Sr?3idKz z$wmV#is7~JQ7-q5fd2vhEhM4qx9;GioOluM1QMb9!1uEIf&b$^NJIA%_$ZrLme)SX zMoUlcGa7Gz%KWIl$R+^+IFOtIx%zKHS6~7?$2ns{KLn=28IKS?uC{3Gr?6QdhBF%E VT2_TYK8OQ>{LfcAhYLG4{RLIGxtjn0 delta 1052 zcmZ9L%W70X6h*7kotuXS1rfo45i$`RJCI;R9SBa+jvP5?%)kptcZhL(|3C=+BTB%x zCccfv_p>$Het>`A#I-6_(pb%=&fc|8ojO&wuO9w=XreweH4;LN-)Q)?GI3;TJTyXx zSZI}P!f+Ej0UO{2=v_Pir&g8iQ}gBG$?9E#}L*3Xr5%NLX0h?y5U^PQ#W zYs6jfMP-;;J@m5O?3f_`#=O{CYAqzbHNa1^&WUEi0mLDo;PK@3#67Cq;kw6`*Anlo zZq(Om)j^hSBzcT^I&nMJnz`G{^*?8}O!mtyrDc+b{NZ zmq&J2YjFMd!P)rGA*>Ty&ylqU#A@!9wTHy!JF@nOSWRD(liSN&V(CVl`T>{)wNH=vSQY;R~@FnBcmbdqCg!JMgb!%YGYj s*SwM+z-w^L??ir-wruPt*aghl3X|I%dg*;&K@BGQ9rssP#wK_E1({}&_5c6? diff --git a/gsk/resources/vulkan/color-clip-rounded.vert.glsl b/gsk/resources/vulkan/color-clip-rounded.vert.glsl index 2303d90e70..985a174f97 100644 --- a/gsk/resources/vulkan/color-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/color-clip-rounded.vert.glsl @@ -7,8 +7,6 @@ layout(location = 1) in vec4 inColor; layout(location = 0) out vec2 outPos; layout(location = 1) out flat vec4 outColor; -layout(location = 2) out flat vec4 outClipBounds; -layout(location = 3) out flat vec4 outClipWidths; out gl_PerVertex { vec4 gl_Position; @@ -26,6 +24,4 @@ void main() { gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); outPos = pos; outColor = inColor; - outClipBounds = push.clip_bounds; - outClipWidths = push.clip_widths; } diff --git a/gsk/resources/vulkan/color-clip-rounded.vert.spv b/gsk/resources/vulkan/color-clip-rounded.vert.spv index b28355446742af9ee4540fa8e646452aea568189..941189cf448a40eb49e27cd54a70dea7ac9687e6 100644 GIT binary patch delta 53 zcmZn=e89)c%%sfDz`zKEybN{|c}*F)Cpv3xESbYN*@5ZL<`U)#rp-2NcNjVT0##T5 FF#s>H3@rcv delta 335 zcmYjLK?;IU5S{;jCM^`&v@3#E5z)#BBGar~weA8g6e5Fk5pBAHbb!tf9;hxN^hT57 z^Z4`Lym>Qk^VT+$9Oy&>&mccDEMa8cP_v21dqxj2(Wptx;xzFN(P+I*1%nKYg F13m`qBjf-8 diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl b/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl index c0e42cac6d..6015aee752 100644 --- a/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl +++ b/gsk/resources/vulkan/color-matrix-clip-rounded.frag.glsl @@ -1,5 +1,7 @@ #version 420 core +#include "constants.glsl" + struct RoundedRect { vec4 bounds; vec4 corners; @@ -7,10 +9,8 @@ struct RoundedRect { layout(location = 0) in vec2 inPos; layout(location = 1) in vec2 inTexCoord; -layout(location = 2) in flat vec4 inClipBounds; -layout(location = 3) in flat vec4 inClipWidths; -layout(location = 4) in flat mat4 inColorMatrix; -layout(location = 8) in flat vec4 inColorOffset; +layout(location = 2) in flat mat4 inColorMatrix; +layout(location = 6) in flat vec4 inColorOffset; layout(set = 0, binding = 0) uniform sampler2D inTexture; @@ -70,7 +70,7 @@ color_matrix (vec4 color, mat4 color_matrix, vec4 color_offset) void main() { - RoundedRect r = RoundedRect(vec4(inClipBounds.xy, inClipBounds.xy + inClipBounds.zw), inClipWidths); + RoundedRect r = RoundedRect(vec4(push.clip_bounds.xy, push.clip_bounds.xy + push.clip_bounds.zw), push.clip_widths); color = color_matrix (texture (inTexture, inTexCoord), inColorMatrix, inColorOffset) * clip (inPos, r); } diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.frag.spv b/gsk/resources/vulkan/color-matrix-clip-rounded.frag.spv index f4c753aae688db2c02d395969f61ed8772d4b72d..f0a36e010c8729acc849f396b495e28ecfb283e4 100644 GIT binary patch delta 1656 zcmZ9L%T7~K6oz+udVykrf?A9T0T~fT#xNj6qUiu;RAb`6fmT{<6M9bVMV*)vU%bNc7!vEgXc7Fw}dkmE68kaH(J+j z1U+o6Y?>W9+Yuv2c)F!RmyW(5AQ;$_kP}*j&9klgK>yyw;4gYfO zZnxL2MI5DDt`r3ADt;L=(m&%BLz-#$CE_=>wmP-0jYyd>@vTa`(v0wtAv`{W3pP(V zU<8yoHDo^;!|VS?6w29{b^W@TEeLbsoZgO^jB(0k@H-#lm?K;{#xX;<>ykC&**oxC zQvr-^)`a@ifnaW@2JjHi$1pRT73Ol1u?pi>Pgxz?Ah~B(#MziIwoK&9q`;i%oqMT+ zL^vxW{ZC0oV=||*UPKuCN`%<~{II`_bnt26lX`xaPzv^6dNK#>#DnP_?u6Js#`K?L z=EJ|j(rt|GQ92wkV8+8Crw5kKd%+H7JaE{vkxoC@!Hi2^gMBp8T}{GMc4j!ZgoXaC z>`KTUx@)FoWe*)L2(yO{j|j7O4vz`5ci;?7ynT@+#dJyB6(T&)dAIgl5hb|7satx zpCweyaooOiI4*bG7wN=v9QRc^9DZfpz(l@D$hlAd1mWaH_(M7!uw`z9Kc&N$RZvdP z0|`msS5^MAh{K<)O6oQ?3QSXJ>1@yy#Zy2=IzAx=60ir51h7_l>8unsb^`2*nUK!E z4jcOcUXD7Ols=<)@)3vK6)`QHeV)Ke2{#R{E`GEvrv*e>fQ`etZ8p$E8V%8?e#jlf)-oZMU423v@^I}@R7@ME8EKY z&M&s_F8+G=&S0;CJx|}n4pZ2uenY_ny!c5*{?uJQwToY!};HJvb@S%juSr-d`RB-St zx&QTj&Wjj#ej%esC))mVeknZe`$`xN;U#gq_w*Pk`dUIRe6G3A$?T1E4#V=?vFbaL zQ+e{ObP}*U_f9$-el3-t)AtgR9!rS9$KS$7={$*+iYMAXN$`iiqN6@7xMr?vW9mO7 zOq>LC@LR%!HD ClAB@x diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl b/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl index 5d3e3400e6..1c7f0a4342 100644 --- a/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl +++ b/gsk/resources/vulkan/color-matrix-clip-rounded.vert.glsl @@ -9,10 +9,8 @@ layout(location = 6) in vec4 inColorOffset; layout(location = 0) out vec2 outPos; layout(location = 1) out vec2 outTexCoord; -layout(location = 2) out flat vec4 outClipBounds; -layout(location = 3) out flat vec4 outClipWidths; -layout(location = 4) out flat mat4 outColorMatrix; -layout(location = 8) out flat vec4 outColorOffset; +layout(location = 2) out flat mat4 outColorMatrix; +layout(location = 6) out flat vec4 outColorOffset; out gl_PerVertex { vec4 gl_Position; @@ -41,8 +39,6 @@ void main() { gl_Position = push.mvp * vec4 (pos, 0.0, 1.0); outPos = pos; - outClipBounds = push.clip_bounds; - outClipWidths = push.clip_widths; vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw, rect.zw / inRect.zw); diff --git a/gsk/resources/vulkan/color-matrix-clip-rounded.vert.spv b/gsk/resources/vulkan/color-matrix-clip-rounded.vert.spv index d4db4839d1827fba2b328280bbf9fe0c7eae7a17..14b85f53ee5eeaa6100df3c236547139ff728f4d 100644 GIT binary patch delta 1318 zcmZ9LOKTHR7>3Vel33BP=pZEv#ULs!Ti|Q*0JNX&^+&E))?FT5CGi zdaJFqYOSeS<6UD->faDo{s8}h?=#G?gA-oP`@P@we3@zOZSC>g#LjibIQn_!N7LKy z^fwFHtuw}$H$q2P5xPQedE}3iOPW#fTB%+wov)dce#DlCPnGH?QB0_jTe(z|Sg2I0 zL(td7sz(QF)p9+|NSkipxdTow*yaAdkPK^Xm&Xx~m}EH1n(c;j zZHj!%h%XV@bXc?9aCRHZJ@BQY*j{@n`76;lE0b%`E~j?ab#et)*dhCC#EUxdW7F39 zzloDu6!2p+hOKu^yeklopME_7{{fQ^uv=^C`V@9xxeI$-H%VINgVsY*`!>Z|fgV{RMV^uHygz delta 1571 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 oei1Jh{x^d4kAEY51Z*v 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 literal 6208 zcmZve`F~th8OCp$NxD%GD2oCiwJxZ&Vks1?z_g*JXfUBg>Yh%LX*!b3#LT1=*G5E< zq7}sj)ViTkweE_F3ofX2SJb*M|AoKk$M5&fdEwYkZaz=X`#kS^w&$LEIz3C*Eh~y8 z{H-qjRdk=zi>2_QSXK0u?a=V9;SKH1}P^Xu{^75G$*F#C-Z_{D)K$_Qoo8h zrs|!sskz!@qu%U{&9>SX?ccj`3wkeWSV@aSTq#Z`ZtdOMu6Mdz4;sx~o!VTd%=g0` zhov9`fR<{X*8#x%->s{KYb2a zUwj|b?&`E=2N|0;(5>~1`aVOpzXJ`nrdxB$#C=I4OlRRSt@O}Za`yGSr+Ku#)I9%< z=1BJx@ugX3eWO{<(ncz^g-m;P()?bcZe!B?enPt>X?{T_q@nG-*O+hWBIK;9qeGtIKOH>Lwp}<_TNFh zXVRw^SRZ^{ss6vlOYXZg@41qnlDKC|zB+Nwlic;5 z$?o0%T6X5%jL#-=>;Z5Nw_ffytEPvWXa^Fv-uuCv zy7h9uX*Khg(>lKE>F53VEjzZkt7v_9qyI?a;i25`-Wuz7rr3QszTA7jyxj5p_T{mU7ZWc5 z_J0Yj>vO)S_ddw$UjdJEy(i_uV|guU_Sf@q;P~=AwB8G`9`kizzMuRQt!sCF*SDJ1 z|Cs$w{01lOO)AI|dnbPveKyEpNuKXOw2{cz7!6D8t~qKq66dv-z}19naxK=nzs|?+bb4UXhWuVYqQ4vcm`evVn4nQ_oHTQ z`0@r~een(pU*1Tp9=;qTb{xm30>?Q>YhC#ACgO#R-FFf9mKJp@I}qq@a0ZoeK`cem$wtEhcE9Sb{x-c z73hnab>Yi9i4SM|uEfKacfr-fV!pf^-5Q_peD2Hp;I7S@ z@a6r)v7hio&D!wg1H}4rF9=^gNUR>de2Ca_?g3SxFKX6>FCQj8lJSou9=?1Ot|k`q z zZ$9_st8mw5P5AOP;@D64qGoOQ@^xZ;$?unMz}3T-ZxTDs1E31@Ma{bK-O-%DEV%lFaj{}3>r`|<<0YqKVN`5|%aCwx(}HhlRJ zvA!GvabA8*tRBAngxGN&234RhYSx7>KP5h%@t-9gzWf}nCKmJM7wFdbgfG7&R?B_) zRnl@_evM{->&@rB{08pYtO;L!OC0+NU(~D(Uw%idFZuoQd$@Y|@&{tac?48}zNlFj zzWkB+M8^M=c=+;XxSCkZm%pG};}gF8l~^tJ